Container Service Mesh由京东商城基础架构部开发,它基于JDOS平台进行开发与扩展,是一个专用的软件基础设施层,来控制和监控微服务应用程序中服务到服务的内部通信,让服务到服务通信变得快速、安全和可靠。在这种模式下,开发者(“服务所有者”)并不需要关心Service Mesh的存在,只需要在对应控制页配置路由规则和关注自己应用的数据流向即可。简单点说,就是我们不需要自己针对应用,来开发应用访问者授权、请求来源监控拓扑图,只需交给Service Mesh就可以了,大家可以让更多的精力投入到自己的应用开发中。使用它能极大提高业务生产力和IT资源使用率的提升。Container Service Mesh的开发已接近尾声,将尽快与大家见面。
0侵入 -- 不需要针对现有的业务程序做任何修改,使开发人员更专注业务逻辑,从而加速业务的开发和上线
跨语言 -- 一些RPC服务对语言开发有要求,但使用ServiceMesh将改变这一现象
轻量级路由 -- 它会形成了一个分布式的互连代理网络,以sidecar形式部署在服务两侧,服务对于代理无感知,且服务间所有通信都由代理进行路由 。
envoy:负责从注册中心同步路由规则,并且做数据请求filter工作,同时将请求相关信息,通过流式数据保存到Jaeger中
Jaeger:可以帮助收集请求时间数据,监控应用在微服务架构下的延迟问题。同时可用于管理这些网络数据的收集和查找,可以查询整个分布式系统的调用链数据
注册中心/控制中心:由consul技术实现,可以做到跨数据中心级别的数据快速复制,为本数据中心的路由规则提供化分布式存储服务
服务治理服务:用户可以直接在JDOS上操作自己的服务应的路由规则,从而起到应用的访问权限控制的作用
统计监控服务:配合Jaeger的数据,用于存储和展示服务与服务之间的调用链情况,以及数据流向,并可根据数据流量情况,动态的为应用配置负载均衡规则
通过如上的Container Service Mesh平台,大家的应用无需任何改造,即可做到访问者授权控制、请求来源监控拓扑图展现,更方便的服务于大家。
开箱即用,0侵入
对业务代码0侵入,开发者无需去学习新的技术栈,无需关心因为引入新特性带来学习成本,也无需关心分布式架构带来的复杂性以及引入的技术问题。
使用者只需要在JDOS勾选启用Service Mesh功能,更新配置,即可使用。
加强了可靠性和可视性
Service Mesh 可以做到智能的去选择流量路径,对于网络中故障服务,可进行监控追踪,从而发现故障服务。
服务如果出现问题(如hang住等),Service Mesh 可以将这些从负载均衡中摘掉,并观测,当服务恢复正常后(如 GC时间太长导致的服务不可用,GC结束后服务状态可以恢复),再次挂到负载均衡。
在可见性方面,Service Mesh引入Jaeger作为分布式追踪,可以监控服务间调用的监控数据,这有助于调试和优化服务。
稳固了内部服务通信
后端应用程序不断迭代,每次上线发布新版本,安全部门都要重新发布证书,配置认证服务器,这种部署方式耗时耗力。
Service Mesh可以拦截服务间所有的网络通信,从而控制服务间的通信权限,可以控制服务间的权限、对于特定用户访问特定服务等,这些都可通过Mesh的配置来决定,无需重新更新安全配置的策略。
熔断:京东业务特别复杂,系统一直在不断的拆分,内部的RPC层层嵌套,这引入了一个新的问题,怎么快速失败或者降级,对于恶意扫描接口的服务,怎么做到中断,以保护被访问服务的稳定。Service Mesh可以动态的观测,满足一定策策略后中断,保护被访问服务。
动态路由:从开发版本到生产环境,从一个版本到另一个版本,传统的方式做到Blue/Green 部署、Canary 部署非常困难,开发者需要和运维之间协调。而Service Mesh有动态路由功能,开发/部署 人员可以轻松的做到高级部署策略。
负载均衡:一些特别的服务(活动页、秒杀等),并发访问量会非常高,对于高并发的服务,有上万个pod,这些服务可能出现不可能,访问量大造成卡顿等,Service Mesh负载均衡可以通过提供高级负载均衡算法来实现更加智能、高效的流量分发,降低延时,提高可靠性。
服务发现:内部服务升级非常频繁,服务实例经常的更新部署,销毁。如何让其他调用服务时,不会打到一个不存的实例会变的很复杂,Service Mesh提供了一个平台无关的服务发现机制。
语言无关:Service Mesh 作为Slider car独立运行在pod中,和业务容器脱离。
多协议支持:同多语言支持一样,实现多协议支持也非常容易。
指标和分布式追踪:Service Mesh 对整个基础设施层的可见性使得它不仅可以暴露单个服务的运行指标,而且可以暴露整个集群的运行指标。
安全通讯:业务系统,尤其是金融系统,对于安全要求非常高,也不容易控制和实现,而京东本身服务间通讯非常复杂,如何保证通讯安全变得非常重要。通过将安全机制如 TLS 加解密和授权实现在 Service Mesh 上,不仅可以避免在不同应用的重复实现,而且很容易在整个基础设施层更新安全机制,甚至无需对应用做任何操作。
重试和最后期限:ServiceMesh 的重试功能避免将其嵌入到业务代码,同时最后期限使得应用允许一个请求的最长生命周期,而不是无休止的重试。
为目前市面的产品性能都不是很高,且活跃度最高的Istio组件过于复杂,且不能满足当前京东的业务需求,所以我们只采用Envoy做数据面管理,自研Service Mesh平台。
联系人:
吴正轩(邮箱:wuzhengxuan@jd.com)
潘茂翔(邮箱:panmaoxiang@jd.com)
任 侨(邮箱:renqiao1@jd.com)